﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace RzCorportativo.Views
{
    public partial class Pessoa : System.Web.UI.UserControl
    {
        private List<string> errors = new List<string>();
        public HttpPostedFile FotoUsuario { get; set; }

        public bool IsValid
        {
            get { return this.errors.Count == 0; }
        }

        Lib.TipoLogin TipoCadastro { get; set; }

        public RzCorportativo.Lib.Usuario Model
        {
            get
            {
                errors.Clear();
                RzCorportativo.Lib.Usuario usuario = new RzCorportativo.Lib.Usuario();
                usuario.Cpf = EFramework.Web.Configuration.MaskConfiguration.RemoveMask(this.Cpf.Text, "cpfKeyDel");
                if (string.IsNullOrEmpty(usuario.Cpf))
                    errors.Add("Cpf inválido");
                usuario.DataNascimento = EFramework.Web.TypeExtension.DateTimeExtension.Parse(this.DataNascimento.Text, DateTime.MinValue);
                if (DateTime.MinValue.Equals(usuario.DataNascimento))
                    errors.Add("Data de nascimento inválida");
                usuario.Email = this.Email.Text;
                if (!EFramework.Web.Validation.ServiceValidation.EmailIsValid(usuario.Email, true))
                    errors.Add("E-mail inválido");
                usuario.Nome = this.Nome.Text;
                usuario.UsuarioId = EFramework.Web.TypeExtension.IntExtension.Parse(this.Codigo.Text, 0);
                if (string.IsNullOrEmpty(this.Sexo.SelectedValue))
                    errors.Add("Sexo inválido");
                usuario.Sexo = this.Sexo.SelectedValue;
                usuario.Telefone = EFramework.Web.Configuration.MaskConfiguration.RemoveMask(this.Telefone.Text, "telKeyDel");
                if (string.IsNullOrEmpty(usuario.Telefone))
                    errors.Add("Telefone inválido");
                if (string.IsNullOrEmpty(this.Ativo.SelectedValue))
                    errors.Add("Status inválido");
                usuario.Ativo = "1".Equals(this.Ativo.SelectedValue);
                usuario.Endereco = this.endereco.Model;
                if (usuario.Endereco.CidadeId == 0)
                    errors.Add("Cidade inválida");
                if (string.IsNullOrEmpty(usuario.Endereco.Cep))
                    errors.Add("CEP inválio");
                usuario.LoginId = BasePage.CurrentLogin.LoginId;
                if (usuario.LoginId.Equals(0))
                    errors.Add("Login inválido, tente logar novamente. Caso o problema persista entre em contato com a equipe de desenvolvimento");
                this.FotoUsuario = Foto.PostedFile;
                return usuario;
            }
        }

        public List<String> GetErrors()
        {
            return this.errors;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (this.IsPostBack)
                return;
            if (BasePage.IsAuthenticate)
            {
                if (BasePage.CurrentLogin.TipoLogin != Lib.TipoLogin.Empresa)
                {
                    this.Sexo.Items.RemoveAt(this.Sexo.Items.Count - 1);

                }
                if (BasePage.CurrentLogin.TipoLogin != Lib.TipoLogin.Interno)
                {
                    this.Ativo.SelectedIndex = 1;
                    this.Ativo.Enabled = false;
                }
                if (BasePage.CurrentLogin.TipoLogin == Lib.TipoLogin.Candidato)
                {
                    this.Cpf.Attributes["placeholder"] = "CPF";
                    this.Cpf.Attributes["mask"] = "cpf";
                }
                if (BasePage.CurrentLogin.TipoLogin == Lib.TipoLogin.Empresa)
                {
                    this.Cpf.Attributes["placeholder"] = "CNPJ";
                    this.Cpf.Attributes["mask"] = "cnpj";
                    this.DataNascimento.Attributes["placeholder"] = "Data Cadastro";
                    this.DataNascimento.Attributes.Remove("date");
                    this.DataNascimento.Text = DateTime.Now.ToString("dd/MM/yyyy");
                    this.DataNascimento.Enabled = false;
                    this.Sexo.Enabled = false;
                    this.Sexo.SelectedValue = "E";
                }
            }
        }

        internal void SetTipoCadastro(Lib.TipoLogin tipoCadastro)
        {
            this.TipoCadastro = tipoCadastro;
        }

        internal void LoadModel(RzCorportativo.Lib.Usuario paciente, bool noLoad = false)
        {
            if (paciente == null)
                return;
            if (!noLoad)
                paciente = RzCorportativo.Lib.Usuario.CreateInstace(paciente.UsuarioId);

            this.Cpf.Text = paciente.Cpf;
            this.DataNascimento.Text = paciente.DataNascimento.ToString("dd/MM/yyyy");
            this.Email.Text = paciente.Email;
            this.Nome.Text = paciente.Nome;
            this.Codigo.Text = paciente.UsuarioId.ToString();
            this.Sexo.SelectedValue = paciente.Sexo;
            this.Telefone.Text = paciente.Telefone;
            this.Ativo.SelectedValue = paciente.Ativo ? "1" : "0";
            this.endereco.LoadModel(paciente.Endereco);
        }

        internal bool SalvarFoto()
        {
            if (this.FotoUsuario == null)
                return false;
            this.FotoUsuario.SaveAs(Server.MapPath("~/Recursos/upload/") + this.Model.UsuarioId + ".jpg");//Path.GetExtension(this.Foto.PostedFile.FileName));
            return true;
        }
        protected string ObterFoto()
        {
            string file = ResolveUrl("~/Recursos/upload/") + (Request.QueryString["paciente"] ?? "") + ".jpg";
            return File.Exists(Server.MapPath(file)) ? file : ResolveUrl("~/Recursos/upload/") + "avatar.jpg";
        }
    }
}